package com.java.basis.generic;

/**
 * 泛型类
 * 语法，类名<T>
 * T,是类型占位符，表示一种引用类型，如果编写多个使用逗号隔开<P, V>
 * @author wangning
 * @create 2021-04-21 20:41
 */
public class MyGeneric<T> {
	//使用泛型T
	//1.创建变量
	T t;
	//2.使用泛型作为方法的参数
	public void show(T t) {
		//T t1 = new T();//？
		//我们不能用来创建对象，因为不确定是什么类型，不能保证构造方法一定可以使用
		System.out.println("t = " + t);
	}
	//3.使用泛型作为方法的返回值
	public T getT() {
		return t;
	}

}

class TestMyGeneric {
	public static void main(String[] args) {
		//使用泛型类创建对象
		//注意：1.泛型只能使用引用类型，2.不同的泛型类型之间不能相互赋值
		MyGeneric<String> myGeneric = new MyGeneric<>();
		myGeneric.t = "hello";
		myGeneric.show("大家好");
		String t = myGeneric.getT();
		System.out.println("t = " + t);

		MyGenericInterfaceImpl myGenericInterface = new MyGenericInterfaceImpl();
		myGenericInterface.server("xxx");

		MyGenericInterfaceImpl02<Integer> m = new MyGenericInterfaceImpl02<>();
		m.server(111);

		//测试泛型方法
		MyGenericMethod myGenericMethod = new MyGenericMethod();
		myGenericMethod.show("中国加油");
		myGenericMethod.show(200);
		myGenericMethod.show(3.14);

		MyGenericMethod.show2(200);
		MyGenericMethod.show2("你好");
	}
}
